advantages of multithreading in java